package pcs

import (
	"fmt"
	"gin/baidu/pcs/pcsutil"
	"gin/baidu/pcs/share/pcsconfig"
	"os"
)

func BeforeReloadFn() error {
	err := ReloadConfig()
	if err != nil {
		fmt.Printf("重载配置错误: %s\n", err)
	}
	return nil
}

func AfterSaveFunc() error {
	err := SaveConfig()
	if err != nil {
		fmt.Printf("保存配置错误: %s\n", err)
	}
	return nil
}

// 登陆
func Login(bduss string, bdstoken string, ptoken string, cookie string) (baidu *pcsconfig.Baidu, err error) {
	err = BeforeReloadFn()

	baidu, err = pcsconfig.Config.SetupUserByBDUSS(bduss, ptoken, bdstoken, cookie)
	if err != nil {
		return
	}

	err = AfterSaveFunc()
	return
}

// 列出所有账号
func LoginList() (accounts pcsconfig.BaiduUserList) {
	accounts = pcsconfig.Config.BaiduUserList
	return
}

// GetConfigDir 获取配置路径
func GetConfigDir() (config string) {
	return pcsconfig.GetConfigDir()
}

// Init 初始化配置
func InitConfig() (err error) {
	err = pcsconfig.Config.Init()
	switch err {
	case nil:
	case pcsconfig.ErrConfigFileNoPermission, pcsconfig.ErrConfigContentsParseError:
		fmt.Fprintf(os.Stderr, "FATAL ERROR: config file error: %s\n", err)
		os.Exit(1)
	default:
		fmt.Printf("WARNING: config init error: %s\n", err)
	}
	return
}

// Reload 从文件重载配置
func ReloadConfig() (err error) {
	err = pcsconfig.Config.Reload()
	return
}

// Reload 从文件重载配置
func SaveConfig() (err error) {
	err = pcsconfig.Config.Save()
	return
}

// Config 文件配置
func CloseConfig() (err error) {
	err = pcsconfig.Config.Close()
	return
}

func ChWorkDir() {
	pcsutil.ChWorkDir()
}

// GetActiveUser 获取当前登录的百度帐号
func GetActiveUser() *pcsconfig.Baidu {
	return pcsconfig.Config.ActiveUser()
}

func GetBaiduPcsConfig() *pcsconfig.PCSConfig {
	return pcsconfig.Config
}

// 切换百度账户
func switchUser(account string) (baidu *pcsconfig.Baidu, err error) {
	baidu, err = pcsconfig.Config.SwitchUser(&pcsconfig.BaiduBase{
		Name: account,
	})

	if err != nil {
		return
	}
	return
}

// 列出指定账户的指定目录的所有文件,默认是 /apps/Teamones
func ListFilesByAccount(userName string, path string, order string, orderBy string, needTotal bool) (err error) {
	_, err = switchUser(userName)

	return
}
